photo-gallery - 4 - filterable in HTML/CSS

revision:


      <section class="gallery">
        <div class="container">
          <div class="row">
            <div class="gallery-filter">
              <span class="filter-item active" data-filter="all">all</span>
              <span class="filter-item" data-filter="travel">travel</span>
              <span class="filter-item" data-filter="boat">boat</span>
              <span class="filter-item" data-filter="people">people</span>
              <span class="filter-item" data-filter="building">building</span>
            </div>
          </div>
          <div class="row">
            <div class="gallery-item travel">
              <div class="gallery-item-inner">
                <img src="../images/1.jpg" alt="travel">
              </div>
            </div>
            <div class="gallery-item boat">
              <div class="gallery-item-inner">
                <img src="../images/1a.jpg" alt="boat">
              </div>
            </div>
            <div class="gallery-item travel">
              <div class="gallery-item-inner">
                <img src="../images/2.jpg" alt="travel">
              </div>
            </div>
            <div class="gallery-item boat">
              <div class="gallery-item-inner">
                <img src="../images/3a.jpg" alt="boat">
              </div>
            </div>
            <div class="gallery-item boat">
              <div class="gallery-item-inner">
                <img src="../images/4.jpg" alt="boat">
              </div>
            </div>
            
            <div class="gallery-item people">
              <div class="gallery-item-inner">
                <img src="../images/4a.jpg" alt="people">
              </div>
            </div>
            <div class="gallery-item boat">
              <div class="gallery-item-inner">
                <img src="../images/9a.jpg" alt="boat">
              </div>
            </div>
            <div class="gallery-item building">
              <div class="gallery-item-inner">
                <img src="../images/11a.jpg" alt="building">
              </div>
            </div>
            <div class="gallery-item building">
              <div class="gallery-item-inner">
                <img src="../images/12a.jpg" alt="building">
              </div>
            </div>
            <div class="gallery-item building">
              <div class="gallery-item-inner">
                <img src="../images/18.jpg" alt="building">
              </div>
            </div>
          </div>
        </div>
      </section>
      <style>
        .container *{margin:0; box-sizing: border-box; font-family: sans-serif;}
        .container{max-width: 1170px; margin:auto;}
        .row{display: flex;flex-wrap: wrap;}
        img{max-width: 100%; vertical-align: middle;}
        .gallery{width: 100%; display: block; min-height: 100vh; background-color: #3f3e45; padding: 100px 0; }
        .gallery .gallery-filter{padding: 0 15px; width: 100%; text-align: center; margin-bottom: 20px;}
        .gallery .gallery-filter .filter-item{color: #ffffff; font-size: 18px; text-transform: uppercase; display: inline-block; margin:0 10px;      cursor: pointer;
        border-bottom: 2px solid transparent; line-height: 1.2; transition: all 0.3s ease;}
        .gallery .gallery-filter .filter-item.active{ color: #ff9800; border-color : #ff9800;}
        .gallery .gallery-item{ width: calc(100% / 4); padding: 15px;}
        .gallery .gallery-item-inner img{width: 100%;}
        .gallery .gallery-item.show{animation: fadeIn 0.5s ease;}
        @keyframes fadeIn{
            0%{ opacity: 0;}
            100%{opacity: 1;}
          }
          .gallery .gallery-item.hide{display: none;}
          /*responsive*/
          @media(max-width: 991px){
            .gallery .gallery-item{width: 50%;}
          }
          @media(max-width: 767px){
            .gallery .gallery-item{width: 100%; }
            .gallery .gallery-filter .filter-item{ margin-bottom: 10px;}
        }
      </style>
      <script>
        const filterContainer = document.querySelector(".gallery-filter"),
        galleryItems = document.querySelectorAll(".gallery-item");
        
        filterContainer.addEventListener("click", (event) =>{
          if(event.target.classList.contains("filter-item")){
            filterContainer.querySelector(".active").classList.remove("active");
            event.target.classList.add("active");
            const filterValue = event.target.getAttribute("data-filter");
            galleryItems.forEach((item) =>{
              if(item.classList.contains(filterValue) || filterValue === 'all'){
              item.classList.remove("hide");
              item.classList.add("show");
            }
            else{
              item.classList.remove("show");
              item.classList.add("hide");
            }
          });
        }
        });
      </script>